// 一些小方法

//解构函数, 如果没有赋值，以默认值（=9）为值，反之。
let [a,b=9,c] = [1,2,3]
//对象的解构赋值， 必须跟后边赋值的对象的name对应起来才会有值,上面代码中，lk是匹配的模式，po才是变量。真正被赋值的是变量baz，而不是模式foo。
let {baf, hui, lk:po} = {baf: 'nnyt', bbn: 'pppp', lk: 'dsdsad'} // baf='nnyt', hui=undefine, po='dsdsad', lk=undefine


//复制数组, 复制的数组不会因为原数组的改变而改变, 扩展运算符===中括号[]
let x1 = ['l']
let y1 = [...x]

// 拼接数组
let x2 = ['k']
let y2 = ['o']
let z2 = [...x2, ...y2]

// 判断语句
let x3 = ['k']
let y3 = ['o']
if(Object.is(x3,y3)) {
  console.log('x3===y3')
}

// 字符串包含（includes(), startsWith()头部包含, endsWith()尾部包含 ）
let s = 'Hello world!';
s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

// 清楚字符串的空格
const s1 = '  abc  ';

s.trim() // "abc"
s.trimStart() // "abc  " 首清除 
s.trimEnd() // "  abc"  尾清除

// 字符串替换  replaceAll()
'aabbcc'.replaceAll('b', '_')
// 'aa__cc'

// at()方法接受一个整数作为参数，返回参数指定位置的字符，支持负索引（即倒数的位置）字符串和数组都支持。
const str = 'hello';
str.at(1) // "e"
str.at(-1) // "o"

const arr = [5, 12, 8, 130, 44];
arr.at(2) // 8
arr.at(-2) // 130

// 数组的包含 includes()
[1, 2, 3].includes(2)// true

// Object.assign()方法用于对象的合并，将源对象（source）的所有可枚举属性，复制到目标对象（target）。
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
// {a:1, b:2, c:3}
